<script type="text/javascript">
function Calendar(objName) {
    this.style = {
        borderColor               : "#909eff",
        headerBackColor            : "#909EFF",
        headerFontColor            : "#ffffff",
        bodyBarBackColor          : "#f4f4f4",
        bodyBarFontColor          : "#000000",
        bodyBackColor             : "#ffffff",
        bodyFontColor            : "#000000",
        bodyHolidayFontColor     : "#ff0000",
        watermarkColor             : "#d4d4d4",
        moreDayColor             : "#cccccc"
    };
    this.showMoreDay = true;
    this.Obj = objName;
    this.date = null;
    this.mouseOffset = null;
    this.dateInput = null;
    this.timer = null;
    this.formater = null;
//    this.realObj = null;
    this.limit = null;
}
;


Calendar.prototype.toString = function() {
    var str = '<iframe id="CalendarFrm" src="javascript:false;" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;"></iframe>\n';
    str += this.getStyle();
    str += '<div Author="alin" class="calendar" style="display:none;z-index:100" onselectstart="return false" oncontextmenu="return false" id="Calendar">\n';
    str += '<div Author="alin" class="cdrWatermark" id="cdrWatermark"></div><div id="cdrBody" style="position:absolute;left:0px;top:0px;z-index:101;width:140px;">';
    str += this.getHeader();
    str += this.getBody();
    str += '</div><div Author="alin" id="cdrMenu" style="position:absolute;left:0px;top:0px;z-index:101;display:none;"  onmouseover="' + this.Obj + '.showMenu(null);" onmouseout="' + this.Obj + '.hideMenu();"></div></div>';
    return str;
};

Calendar.prototype.getStyle = function() {
    var str = '<style type="text/css">\n';
    str += '.calendar{position:absolute;width:150px!important;width /**/:152px;height:184px!important;height /**/:174px;background-color:' + this.style.bodyBackColor + ';border:1px solid ' + this.style.borderColor + ';left:0px;top:0px;z-index:100;}\n';
    str += '.cdrHeader{background-color:' + this.style.headerBackColor + ';width:150px;height:22px;font-size:12px;color:z-index:102;' + this.style.headerFontColor + ';}\n';
    str += '.cdrWatermark{position:absolute;left:0px;top:55px;width:150px;font-family: Arial Black;font-size:50px;color:' + this.style.watermarkColor + ';z-index:101;text-align:center;}\n';
    str += '.cdrBodyBar{background-color:' + this.style.bodyBarBackColor + ';font-size:12px;color:' + this.style.bodyBarFontColor + ';width:150px;height:20px;}\n';
    str += '.cdrBody{width:150px;height:122px!important; height /**/:110px;font-size:12px;cursor:pointer;color:' + this.style.bodyFontColor + ';}\n';
    str += '.dayOver{height:16px;padding:0px;border:1px solid black;background-color:#f4f4f4;}\n';
    str += '.dayOut{padding:1px;border:none;height:16px;}\n';
    str += '.menuOver{background-color:' + this.style.headerBackColor + ';color:' + this.style.headerFontColor + ';font-size:12px;}\n';
    str += '.headerOver{border:1px solid black;background-color:#f4f4f4;color:black;cursor:default;}\n';
    str += '.cdrMenu{font-size:12px;border:1px solid #000000;background-color:#ffffff;cursor:default;width:100%}\n';
    str += 'html>body #Calendar{width:152px;174px;}';
    str += '</style>\n';
    return str;
};

Calendar.prototype.getHeader = function() {
    var str = '<table Author="alin" class="cdrHeader" cellSpacing="2" cellPadding="0"><tr Author="alin" align="center">\n';
    str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="previousYear" title="<%= label.getLabelName("L_Pre_Year",false) %>" style="cursor:pointer;width:10px;" onclick="' + this.Obj + '.onChangeYear(false);"><<</td>\n';
    str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="previousMonth" title="<%= label.getLabelName("L_Pre_Month",false) %>" style="cursor:pointer;width:10px;" onclick="' + this.Obj + '.onChangeMonth(false);"><</td>\n';
    str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" id="currentYear" style="width:40px;" onclick="' + this.Obj + '.showMenu(true);" onmouseout="' + this.Obj + '.hideMenu();this.className=\'\';">0</td>\n';
    str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" id="currentMonth" style="width:30px;" onclick="' + this.Obj + '.showMenu(false);" onmouseout="' + this.Obj + '.hideMenu();this.className=\'\';">0</td>\n';
    str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="nextMonth" title="<%= label.getLabelName("L_Next_Year",false) %>" style="cursor:pointer;width:10px;" onclick="' + this.Obj + '.onChangeMonth(true);">></td>\n';
    str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="nextYear" title="<%= label.getLabelName("L_Next_Month",false) %>" style="cursor:pointer;width:10px;" onclick="' + this.Obj + '.onChangeYear(true);">>></td></tr>\n';
    str += '</table>\n';
    return str;
};

Calendar.prototype.getBody = function() {
    var n = 0;
    var str = this.getBodyBar();
    str += '<table Author="alin" class="cdrBody" cellSpacing="2" cellPadding="0">\n';
    for (i = 0; i < 6; i++) {
        str += '<tr Author="alin" align="center">';
        for (j = 0; j < 7; j++) {
            str += '<td Author="alin" class="dayOut" id="cdrDay' + (n++) + '" width="13%"></td>\n';
        }
        str += '</tr>';
    }
    str += '</table>\n';
    str += '<table Author="alin" class="cdrBodyBar" cellSpacing="2" cellPadding="0"><tr align="center" Author="alin"><td Author="alin" style="cursor:pointer;" onclick="' + this.Obj + '.getToday();"><%= label.getLabelName("L_TodayN",false) %>:' + new Date().toFormatString("yyyy<%= label.getLabelName("L_YearN",false) %>mm<%= label.getLabelName("L_MonthN",false) %>dd<%= label.getLabelName("L_Sun",false) %>") + '</td></tr></table>\n';
    return str;
};

Calendar.prototype.getBodyBar = function() {
    var str = '<table Author="alin_bar" id="cdrBodyBar" class="cdrBodyBar" style="cursor:move;" cellSpacing="2" cellPadding="0"><tr Author="alin_bar" align="center">\n';
    var day = new Array('<%= label.getLabelName("L_Sun",false) %>', '<%= label.getLabelName("L_Mon",false) %>', '<%= label.getLabelName("L_Tue",false) %>', '<%= label.getLabelName("L_Wed",false) %>', '<%= label.getLabelName("L_Thu",false) %>', '<%= label.getLabelName("L_Fri",false) %>', '<%= label.getLabelName("L_Sat",false) %>');
    for (i = 0; i < 7; i++) {
        str += '<td Author="alin_bar">' + day[i] + '</td>\n';
    }
    str += '</tr></table>';
    return str;
};

Calendar.prototype.getYearMenu = function(year) {
    var str = '<table Author="alin" cellSpacing="0" class="cdrMenu" cellPadding="0">\n';

    for (var i = 0; i < 10; i++) {
        var _year = year + i;
        var _date = new Date(_year, this.date.getMonth(), this.date.getDate());
        str += '<tr Author="alin" align="center"><td Author="alin" width="13%" height="16" ';
        if (this.date.getFullYear() != _year) {
            str += 'onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" ';
        }
        else {
            str += 'class="menuOver"';
        }
        str += 'onclick="' + this.Obj + '.bindDate(\'' + _date.toFormatString("-") + '\')">' + _year + '<%= label.getLabelName("L_YearN",false) %></td>\n';
        str += '</tr>';
    }
    str += '<tr Author="alin" align="center"><td Author="alin"><table Author="alin" style="font-size:12px;width:100%;" cellSpacing="0" cellPadding="0">\n';
    str += '<tr Author="alin" align="center"><td Author="alin" onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" onclick="' + this.Obj + '.getYearMenu(' + (year - 10) + ')"><<</td>\n';
    str += '<td Author="alin" onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" onclick="' + this.Obj + '.getYearMenu(' + (year + 10) + ')">>></td><tr>\n';
    str += '</table></td></tr>\n';
    str += '</table>';
    var _menu = getObjById("cdrMenu");
    _menu.innerHTML = str;
};

Calendar.prototype.getMonthMenu = function() {
    var str = '<table Author="alin" cellSpacing="0" class="cdrMenu" cellPadding="0">\n';
    for (i = 1; i <= 12; i++) {
        var _date = new Date(this.date.getFullYear(), i - 1, this.date.getDate());
        str += '</tr><tr Author="alin" align="center"><td Author="alin" height="16" ';
        if (this.date.getMonth() + 1 != i)
        {
            str += 'onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" ';
        }
        else
        {
            str += 'class="menuOver"';
        }
        str += 'onclick="' + this.Obj + '.bindDate(\'' + _date.toFormatString("-") + '\')">' + i + '<%= label.getLabelName("L_MonthN",false) %></td></tr>\n';
    }
    str += '</table>';
    var _menu = getObjById("cdrMenu");
    _menu.innerHTML = str;
};

Calendar.prototype.show = function() {
    if (arguments.length > 4 || arguments.length == 0) {
        alert("error params");
        return;
    }
    var _date = null;
    var _evObj = null;
    var _initValue = null;
    for (var i = 0; i < arguments.length; i++) {
        //        if (typeof(arguments[i]) == "object" && arguments[i].type == "text") {
        //            _date = arguments[i];
        //        } else
        if (typeof(arguments[i]) == "object") {
            var p = arguments[i];
            if (p.limit == null) {
                _evObj = arguments[i];
            } else {
                this.limit = p.limit;
            }
        } else if (typeof(arguments[i]) == "string") {
            var temp = arguments[i];
            var pattern = /^[a-zA-Z0-9]*.[a-zA-Z0-9]*$/;
            var flag = pattern.test(temp);
            if (flag) {
                _date = eval(temp);
//                var j = 0;
//                for (var tt = temp.length; tt > 0; tt--) {
//                    j++;
//                    var n = temp.charAt(temp.length - j);
//                    var p = /^[0-9]$/;
//                    if (!p.test(n)) {
//                        j--;
//                        break;
//                    }
//                }
//                var tm;
//                if (j > 0) {
//                    tm = temp.substring(0, temp.length - j);
//                }
            } else {
                var t = temp.split('-');
                if (t[2] != null && t[2] > 0 && t[2] <= 31) {
                    _initValue = arguments[i];
                } else {
                    this.formater = arguments[i];
                }
            }
        }
    }
    _evObj = _evObj || _date;
//    if (tm != null && tm != "") {
//        this.realObj = eval(tm);
//    }
    inputObj = _date;
    targetObj = _evObj.firstChild;
    if (!_date) {
        alert("error params!!");
        return;
    }
    this.dateInput = _date;
    _date = _date.value;
    if (_date == "" && _initValue) _date = _initValue;
    this.bindDate(_date);
    var _target = getPosition(_evObj);
    var _obj = getObjById("Calendar");
    _obj.style.display = "";
    _obj.style.left = _target.x + 'px';
//    if ((document.body.clientHeight - (_target.y + _evObj.clientHeight)) >= _obj.clientHeight) {
        _obj.style.top = (_target.y + _evObj.clientHeight) + 'px';
//    } else {
//        _obj.style.top = (_target.y - _obj.clientHeight) + 'px';
//    }
    showFrm(_obj);
};

Calendar.prototype.hide = function() {
    var obj = getObjById("Calendar");
    obj.style.display = "none";
    getObjById("CalendarFrm").style.display = "none";
};

Calendar.prototype.bindDate = function(date) {
    var _monthDays = new Array(31, 30, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    var _date;
    var _arr
    switch (this.formater) {
        case "MM\/dd\/yyyy" :
            _arr = date.split('\/');
            _date = new Date(_arr[2], _arr[0] - 1, _arr[1]);
            break;
        case "MM\/dd\/yy" :
            _arr = date.split('\/');
            _date = new Date('20' + _arr[2], _arr[0] - 1, _arr[1]);
            break;
        case "MM-dd-yyyy" :
            _arr = date.split('-');
            _date = new Date(_arr[2], _arr[0] - 1, _arr[1]);
            break;
        case "MM-dd-yy" :
            _arr = date.split('-');
            _date = new Date('20' + _arr[2], _arr[0] - 1, _arr[1]);
            break;
        case "dd\/MM\/yyyy" :
            _arr = date.split('\/');
            _date = new Date(_arr[2], _arr[1] - 1, _arr[0]);
            break;
        case "dd\/MM\/yy" :
            _arr = date.split('\/');
            _date = new Date('20' + _arr[2], _arr[1] - 1, _arr[0]);
            break;
        case "dd-MM-yyyy" :
            _arr = date.split('-');
            _date = new Date(_arr[2], _arr[1] - 1, _arr[0]);
            break;
        case "MM-dd-yyyy" :
            _arr = date.split('-');
            _date = new Date(_arr[2], _arr[0] - 1, _arr[1]);
            break;
        case "MM-dd-yy" :
            _arr = date.split('-');
            _date = new Date('20' + _arr[2], _arr[0] - 1, _arr[1]);
            break;
        case "dd-MM-yy" :
            _arr = date.split('-');
            _date = new Date('20' + _arr[2], _arr[1] - 1, _arr[0]);
            break;
        case "yyyy-MM-dd" :
            _arr = date.split('-');
            _date = new Date(_arr[0], _arr[1] - 1, _arr[2]);
            break;
        case "yyyy\/MM\/dd" :
            _arr = date.split('\/');
            _date = new Date(_arr[0], _arr[1] - 1, _arr[2]);
            break;
        case "yy-MM-dd" :
            _arr = date.split('-');
            _date = new Date('20' + _arr[0], _arr[1] - 1, _arr[2]);
            break;
        case "yy\/MM\/dd" :
            _arr = date.split('\/');
            _date = new Date('20' + _arr[0], _arr[1] - 1, _arr[2]);
            break;
        default :
            _date = new Date(_arr[0], _arr[1] - 1, _arr[2]);
    }

            if (isNaN(_date)) _date = new Date();
            this.date = _date;
            this.bindHeader();
            var _year = _date.getFullYear();
            var _month = _date.getMonth();
            var _day = 1;
            var _startDay = new Date(_year, _month, 1).getDay();
            var _previYear = _month == 0 ? _year - 1 : _year;
            var _previMonth = _month == 0 ? 11 : _month - 1;
            var _previDay = _monthDays[_previMonth];
            if (_previMonth == 1) _previDay = ((_previYear % 4 == 0) && (_previYear % 100 != 0) || (_previYear % 400 == 0)) ? 29 : 28;
            _previDay -= _startDay - 1;
            var _nextDay = 1;
            _monthDays[1] = ((_year % 4 == 0) && (_year % 100 != 0) || (_year % 400 == 0)) ? 29 : 28;
            for (i = 0; i < 40; i++) {
                var _dayElement = getObjById("cdrDay" + i);
                _dayElement.onmouseover = Function(this.Obj + ".onMouseOver(this)");
                _dayElement.onmouseout = Function(this.Obj + ".onMouseOut(this)");
                _dayElement.onclick = Function(this.Obj + ".onClick(this)");
                this.onMouseOut(_dayElement);
                _dayElement.style.color = "";
                if (i < _startDay) {
                    if (this.showMoreDay) {
                        var _previDate = new Date(_year, _month - 1, _previDay);
                        _dayElement.innerHTML = _previDay;
                        _dayElement.title = _previDate.toFormatString("yyyy<%= label.getLabelName("L_YearN",false) %>mm<%= label.getLabelName("L_MonthN",false) %>dd<%= label.getLabelName("L_Sun",false) %>");
                        _dayElement.value = _previDate.toFormatString("-");
                        _dayElement.style.color = this.style.moreDayColor;
                        _previDay++;
                    } else {
                        _dayElement.innerHTML = "";
                        _dayElement.title = "";
                    }
                } else if (_day > _monthDays[_month]) {
                    if (this.showMoreDay) {
                        var _nextDate = new Date(_year, _month + 1, _nextDay);
                        _dayElement.innerHTML = _nextDay;
                        _dayElement.title = _nextDate.toFormatString("yyyy<%= label.getLabelName("L_YearN",false) %>mm<%= label.getLabelName("L_MonthN",false) %>dd<%= label.getLabelName("L_Sun",false) %>");
                        _dayElement.value = _nextDate.toFormatString("-");
                        _dayElement.style.color = this.style.moreDayColor;
                        _nextDay++;
                    } else {
                        _dayElement.innerHTML = "";
                        _dayElement.title = "";
                    }
                } else if (i >= new Date(_year, _month, 1).getDay() && _day <= _monthDays[_month]) {
                    _dayElement.innerHTML = _day;
                    if (_day == _date.getDate()) {
                        this.onMouseOver(_dayElement);
                        _dayElement.onmouseover = Function("");
                        _dayElement.onmouseout = Function("");
                    }
                    if (this.isHoliday(_year, _month, _day)) {
                        _dayElement.style.color = this.style.bodyHolidayFontColor;
                    }
                    var _curDate = new Date(_year, _month, _day);
                    _dayElement.title = _curDate.toFormatString("yyyy<%= label.getLabelName("L_YearN",false) %>mm<%= label.getLabelName("L_MonthN",false) %>dd<%= label.getLabelName("L_Sun",false) %>");
                    _dayElement.value = _curDate.toFormatString("-");
                    _day++;
                } else {
                    _dayElement.innerHTML = "";
                    _dayElement.title = "";
                }
            }
            var _menu = getObjById("cdrMenu");
            _menu.style.display = "none";
    }
    ;

    Calendar.prototype.bindHeader = function() {
        var _curYear = getObjById("currentYear");
        var _curMonth = getObjById("currentMonth");
        var _watermark = getObjById("cdrWatermark");
        _curYear.innerHTML = this.date.toFormatString("yyyy<%= label.getLabelName("L_YearN",false) %>");
        _curMonth.innerHTML = this.date.toFormatString("mm<%= label.getLabelName("L_MonthN",false) %>");
        _watermark.innerHTML = this.date.getFullYear();
    };

    Calendar.prototype.getToday = function() {
        var _date = new Date();
        this.bindDate(_date.toFormatString("-"));
    };

    Calendar.prototype.isHoliday = function(year, month, date) {
        var _date = new Date(year, month, date);
        return (_date.getDay() == 6 || _date.getDay() == 0);
    };

    Calendar.prototype.onMouseOver = function(obj) {
        obj.className = "dayOver";
    };

    Calendar.prototype.onMouseOut = function(obj) {
        obj.className = "dayOut";
    };

    Calendar.prototype.onClick = function(obj) {
        if (obj.innerHTML != "") {
            var temp = obj.value.split('-');
            var year = temp[0];
            var month = temp[1];
            var day = temp[2];
            var vData;
            var vMonth = (month.toString().length < 2) ? "0" + month : month;
            var vY4 = new String(year);
            var vY2 = new String(year.substr(2, 2));
            var vDD = (day.toString().length < 2) ? "0" + day : day;

            if (this.limit != null) {
                var curYear = new Date().getFullYear();
                if (Math.abs(curYear - year) > Number(this.limit)) {
                    alert('<%= label.getLabelName("L_Can_Not_Larger",false) %>' + Number(this.limit) + '<%= label.getLabelName("L_YearN",false) %>');
                    return;
                }
            }

            switch (this.formater) {
                case "MM\/dd\/yyyy" :
                    vData = vMonth + "\/" + vDD + "\/" + vY4;
                    break;
                case "MM\/dd\/yy" :
                    vData = vMonth + "\/" + vDD + "\/" + vY2;
                    break;
                case "MM-dd-yyyy" :
                    vData = vMonth + "-" + vDD + "-" + vY4;
                    break;
                case "MM-dd-yy" :
                    vData = vMonth + "-" + vDD + "-" + vY2;
                    break;

                case "dd\/MM\/yyyy" :
                    vData = vDD + "\/" + vMonth + "\/" + vY4;
                    break;
                case "dd\/MM\/yy" :
                    vData = vDD + "\/" + vMonth + "\/" + vY2;
                    break;
                case "dd-MM-yyyy" :
                    vData = vDD + "-" + vMonth + "-" + vY4;
                    break;
                case "MM-dd-yyyy" :
                    vData = vMonth + "-" + vDD + "-" + vY4;
                    break;
                case "MM-dd-yy" :
                    vData = vMonth + "-" + vDD + "-" + vY2;
                    break;
                case "dd-MM-yy" :
                    vData = vDD + "-" + vMonth + "-" + vY2;
                    break;
                case "yyyy-MM-dd" :
                    vData = vY4 + "-" + vMonth + "-" + vDD;
                    break;
                case "yyyy\/MM\/dd" :
                    vData = vY4 + "\/" + vMonth + "\/" + vDD;
                    break;
                case "yy-MM-dd" :
                    vData = vY2 + "-" + vMonth + "-" + vDD;
                    break;
                case "yy\/MM\/dd" :
                    vData = vY2 + "\/" + vMonth + "\/" + vDD;
                    break;
                default :
                    vData = vY4 + "-" + vMonth + "-" + vDD;
            }

            this.dateInput.value = vData;
//            if (this.realObj != null) {
//                this.realObj.value = vY4 + "-" + vMonth + "-" + vDD;
//            }
            this.dateInput.focus();
        }
        this.hide();
    };

    Calendar.prototype.onChangeYear = function(isnext) {
        var _year = this.date.getFullYear();
        var _month = this.date.getMonth() + 1;
        var _date = this.date.getDate();

        if (_year > 999 && _year < 10000) {
            if (isnext) {
                _year++;
            } else {
                _year --;
            }
        } else {
            alert("<%= label.getLabelName("L_Year_Out",false) %>");
        }
        this.bindDate(_year + '-' + _month + '-' + _date);
    };

    Calendar.prototype.onChangeMonth = function(isnext) {
        var _year = this.date.getFullYear();
        var _month = this.date.getMonth() + 1;
        var _date = this.date.getDate();

        if (isnext) {
            _month ++;
        } else {
            _month--;
        }
        if (_year > 999 && _year < 10000) {
            if (_month < 1) {
                _month = 12;
                _year--;
            }
            if (_month > 12) {
                _month = 1;
                _year++;
            }
        } else {
            alert("<%= label.getLabelName("L_Year_Out",false) %>");
        }
        this.bindDate(_year + '-' + _month + '-' + _date);
    };

    Calendar.prototype.showMenu = function(isyear) {
        var _menu = getObjById("cdrMenu");
        if (isyear != null) {
            var _obj = (isyear) ? getObjById("currentYear") : getObjById("currentMonth");
            if (isyear) {
                this.getYearMenu(this.date.getFullYear() - 5);
            } else {
                this.getMonthMenu();
            }
            _menu.style.top = (_obj.offsetTop + _obj.offsetHeight) + 'px';
            _menu.style.left = _obj.offsetLeft + 'px';
            _menu.style.width = _obj.offsetWidth + 'px';
        }
        if (this.timer != null) clearTimeout(this.timer);
        _menu.style.display = "";
    };

    Calendar.prototype.hideMenu = function() {
        var _obj = getObjById("cdrMenu");
        this.timer = window.setTimeout(function() {
            _obj.style.display = 'none';
        }, 500);
    };

    Number.prototype.NaN0 = function() {
        return isNaN(this) ? 0 : this;
    };

    Date.prototype.toFormatString = function(fs) {
        if (fs.length == 1) {
            return this.getFullYear() + fs + (this.getMonth() + 1) + fs + this.getDate();
        }
        fs = fs.replace("yyyy", this.getFullYear());
        fs = fs.replace("mm", (this.getMonth() + 1));
        fs = fs.replace("dd", this.getDate());
        return fs;
    };

    var inputObj = null;
    var targetObj = null;
    var dragObj = null;
    var mouseOffset = null;

    function getObjById(obj) {
        if (document.getElementById) {
            return document.getElementById(obj);
        } else {
            alert("not support!");
        }
    }

    function getObjByName(obj) {
        if (document.getElementsByName) {
            return document.getElementsByName(obj)[0];
        } else {
            alert("not support!");
        }
    }

    function mouseCoords(ev) {
        if (ev.pageX || ev.pageY) {
            return {x:ev.pageX, y:ev.pageY};
        }
        return {
            x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
            y:ev.clientY + document.body.scrollTop - document.body.clientTop
        };
    }

    function getPosition(e) {
        var left = 0;
        var top = 0;
        while (e.offsetParent) {
            left += e.offsetLeft + (e.currentStyle ? (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
            top += e.offsetTop + (e.currentStyle ? (parseInt(e.currentStyle.borderTopWidth)).NaN0() : 0);
            e = e.offsetParent;
        }
        left += e.offsetLeft + (e.currentStyle ? (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
        top += e.offsetTop + (e.currentStyle ? (parseInt(e.currentStyle.borderTopWidth)).NaN0() : 0);
        return {x:left, y:top};
    }

    function getMouseOffset(target, ev) {
        ev = ev || window.event;
        var docPos = getPosition(target);
        var mousePos = mouseCoords(ev);
        return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
    }

    function closeCalendar(evt) {
        evt = evt || window.event;
        var _target = evt.target || evt.srcElement;
        if (!_target.getAttribute("Author") && _target != inputObj && _target != targetObj) {
            getObjById("Calendar").style.display = "none";
            getObjById("CalendarFrm").style.display = "none";
        }
    }

    function showFrm(DivRef) {
        var IfrRef = postionFrm(DivRef);
        IfrRef.style.display = "block";
    }

    function postionFrm(DivRef) {
        var IfrRef = getObjById('CalendarFrm');
        IfrRef.style.width = DivRef.offsetWidth;
        IfrRef.style.height = DivRef.offsetHeight;
        IfrRef.style.top = DivRef.style.top;
        IfrRef.style.left = DivRef.style.left;
        IfrRef.style.zIndex = DivRef.style.zIndex - 1;
        return IfrRef;
    }

    function dragStart(evt) {
        evt = evt || window.event;
        var _target = evt.target || evt.srcElement;
        if (_target.getAttribute("Author") == "alin_bar") {
            dragObj = getObjById("Calendar");
            mouseOffset = getMouseOffset(dragObj, evt);
        }
    }

    function drag(evt) {
        evt = evt || window.event;
        if (dragObj) {
            var mousePos = mouseCoords(evt);
            dragObj.style.left = (mousePos.x - mouseOffset.x) + 'px';
            dragObj.style.top = (mousePos.y - mouseOffset.y) + 'px';
            postionFrm(dragObj);
        }
    }


    function dragEnd(evt) {
        dragObj = null;
    }

    document.onclick = closeCalendar;
    document.onmousedown = dragStart;
    document.onmousemove = drag;
    document.onmouseup = dragEnd;


    //Init The Calendar
    var c = new Calendar("c");
    document.write(c);
</script>